home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / comt010d.zip / COMTSRC.ZIP / DECA.ASM < prev    next >
Assembly Source File  |  1991-11-16  |  2KB  |  122 lines

  1. ;;
  2. ;; Copyright 1991 Alexander Pruss
  3. ;;
  4. .model tiny,C
  5.  
  6. .data
  7. decoded_to_end db 0
  8. file_size_mod3 db 0
  9. public decoded_to_end, file_size_mod3
  10.  
  11. .code
  12.  
  13. CodeTop = 34
  14. uudecode_block proc
  15. public uudecode_block
  16.        arg block:word,len:word
  17.        push si
  18.        push di
  19.        mov si,block
  20.        mov di,si
  21.        mov bx,len
  22.        add bx,si
  23. uuTop:
  24.        cmp si,bx
  25.        jae uuDone
  26.        lodsb
  27.        or al,al
  28.        jz uuDone
  29.        cmp al,CodeTop-1
  30.        jz uuEnd
  31.        sub al,CodeTop
  32.        jb uuTop ; Skip what we do not understand
  33.        cmp al,64
  34.        jae uuTop
  35.        mov ah,al
  36.        lodsb
  37.        sub al,CodeTop
  38.        rcr ah,1   ; carry clear
  39.        rcl al,1
  40.        rcr ah,1
  41.        rcl al,1   ; Whee!  al is now right for byte 1
  42.        stosb
  43.        lodsb
  44.        sub al,CodeTop
  45.        rcr ah,1
  46.        rcl al,1
  47.        rcr ah,1
  48.        rcl al,1   ; Whee!  al is now right for byte 2
  49.        stosb
  50.        lodsb
  51.        sub al,CodeTop
  52.        rcr ah,1
  53.        rcl al,1
  54.        rcr ah,1
  55.        rcl al,1   ; Whee!  al is now right for byte 3
  56.        stosb
  57.        jmp uuTop
  58. uuDone:
  59.        mov decoded_to_end,0
  60. uuRet:
  61.        mov ax,di
  62.        sub ax,block
  63.        pop di
  64.        pop si
  65.        ret
  66. uuEnd:
  67.        mov decoded_to_end,1
  68.        lodsb
  69.        sub al,'0'
  70.        mov file_size_mod3,al
  71.        jmp uuRet
  72. uudecode_block endp
  73.  
  74. Skip1:
  75.        dec si
  76.        jmp nTop
  77. ndecode_block proc
  78. public ndecode_block
  79.        arg block:word,len:word
  80.        push si
  81.        push di
  82.        mov si,block
  83.        mov di,si
  84.        mov bx,len
  85.        add bx,si
  86. nTop:
  87.        cmp si,bx
  88.        jae nDone
  89.        lodsw
  90.        or al,al
  91.        jz nDone
  92.        cmp al,'Z'
  93.        jz nEnd
  94.        cmp ax,0a0dh
  95.        jz nTop
  96.        cmp al,0dh
  97.        jz Skip1
  98.        cmp al,0ah
  99.        jz Skip1
  100.        sub ax,'AA'
  101.        shl ah,1
  102.        shl ah,1
  103.        shl ah,1
  104.        shl ah,1
  105.        or al,ah
  106.        stosb
  107.        jmp nTop
  108. nDone:
  109.        mov decoded_to_end,0
  110. nRet:
  111.        mov ax,di
  112.        sub ax,block
  113.        pop di
  114.        pop si
  115.        ret
  116. nEnd:
  117.        mov decoded_to_end,1
  118.        jmp nRet
  119. ndecode_block endp
  120.  
  121.        end
  122.